class Solution {
public:
    int findMaximizedCapital(int k, int w, vector<int>& profits,
                             vector<int>& capital) {
        int n = profits.size();
        // 利用优先队列完成最大堆
        priority_queue<int, vector<int>, less<int>> pq;
        vector<pair<int, int>> v;

        for (int i = 0; i < n; i++) {
            // 将最小资本和利润插入
            v.emplace_back(make_pair(capital[i], profits[i]));
        }
        // 以最小资本来排序
        sort(v.begin(), v.end());
        int pos = 0;
        // 循环完成项目
        for (int i = 0; i < k; i++) {
            // 将vector中小于当前资本的项目插入到优先队列中
            while (pos < n && v[pos].first <= w) {
                // 优先队列会以利润进行排序
                pq.push(v[pos].second);
                pos++;
            }
            // 取出优先队列的队首也就是最大的利润最大的项目
            if (!pq.empty()) {
                w += pq.top();
                pq.pop();
            }
        }
        return w;
    }
};